import random
import pygame
from pygame import*
import time
class HeroPlane(pygame.sprite.Sprite):
    #存放所有飞机子弹的组
    bullets=pygame.sprite.Group()
    def __init__(self,screen,):
        #调用精灵初始化方法
        pygame.sprite.Sprite.__init__(self)
        #创建一个图片，玩家飞机
        self.image=pygame.image.load(".D:\AI\aiprogram\课程设计\tupian\hero.gif")
        #根据图片image获取矩形对象
        self.rect=self.image.get_rect()
        self.rect.topleft=[480/2-100/2,600]
        #飞机速度
        self.speed=5
        #记录当前窗口对象
        self.screen=screen
        #装子弹的列表
        self.bullets=pygame.sprite.Group()
    def key_conttrol(self):
        # 监听键盘事件
        key_pressed=pygame.key.get_pressed()
        if key_pressed[K_w] or key_pressed[K_UP]:
            self.rect.top-=self.speed
        if key_pressed[K_s] or key_pressed[K_DOWN]:
            self.rect.bottom+=self.speed
        if key_pressed[K_a] or key_pressed[K_LEFT]:
            self.rect.left-=self.speed
        if key_pressed[K_d] or key_pressed[K_RIGHT]:
            self.rect.right+=self.speed
        if key_pressed[K_SPACE]:
            # 按下空格键发射子弹
            bullet = Bullet(self.screen,self.rect.left,self.rect.top)
            #把子弹放到列表里
            self.bullets.add(bullet)
            #存放所有飞机子弹的组
            HeroPlane.bullets.add(bullet)
    def update(self):
        self.key_control()
        self.display()
    def display(self):
        # 将飞机图片贴到窗口中
        self.screen.blit(self.image,self.rect)
        #更新子弹坐标
        self.bullets.update()
        #把所有子弹全部添加到屏幕
        self.bullets.draw(self.screen)
    @classmethod
    def clear_bullets(cls):
        #清空子弹
        cls.bullets.empty()
class EnemyPlane(pygame.sprite.Sprite):
    #敌方所有子弹
    enemy_bullets=pygame=pygame.sprite.Group()
    def __init__(self,screen):
        #调用精灵初始化方法
        pygame.sprite.Sprite.__init__(self)
        #创建一个图片，玩家飞机
        self.image=pygame.image.load("D:\AI\aiprogram\课程设计\tupian\enemy0.png")
        #根据图片image获取矩形对象
        self.rect=self.image.get_rect()
        x=random.randrange(1,Manager.bg_size[0],50)
        self.rect.topleft=[x,0]
        #飞机速度
        self.speed=5
        #记录当前窗口对象
        self.screen=screen
        #装子弹的列表
        self.bullets=pygame.sprite.Group()
        #敌机移动的方向
        self.direction='right'
    def display(self):
        #将飞机图片粘贴到窗口中
        self.screen.blit(self.image,self.rect)
        #更新子弹坐标坐标
        self.bullets.update()
        #把所有子弹全部添加到屏幕
        self.bullets.draw(self.screen)
    def update(self):
        self.auto_move()
        self.auto_fire()
        self.display()
    def auto_move(self):
        if self.direction=='right':
            self.rect.right+=self.speed
        elif self.direction=='left':
            self.rect.right-=self.speed
        if self.rect.right>480-51:
            self.direction='left'
        elif self.rect.right<0:
            self direction='right'
        self.rect.bottom+=self.speed
    def auto_fire(self):
        """自动开火 创建子弹对象 添加到列表"""
        random_num=random.randint(1,40)
        if random_num==8:
            bullet=EnemyBullet(self.screen,self.rect.left,self.rect.top)
            self.bullets.add(bullet)
            #把子弹添加到类属性的子弹组里
            EnemyPlane.enemy_bullets.add(bullet)
    @classmethod
    def clear_bullet(cls):
        #清空子弹
        cls.enemy_bullets.empty()
#我方子弹类
#属性
class Bullet(pygame.sprite.Sprite):
    def __init__(self,screen,x,y):
        #精灵类初始化
        pygame.sprite.Sprite.__init__(self)
        #创建图片
        self.image=pygame.image.load("D:\AI\aiprogram\课程设计\tupian\bullet.png")
        #获取矩形对象
        self.rect=self.image.get_rect()
        self.rect.topleft=[x+100/2-22/2,y-22]
        #窗口
        self.screen=screen
        #速度
        self.speed=5
    def update(self):
        #修改子弹坐标
        self.rect.top-=self.speed
        #如果子弹移除屏幕上方  则摧毁子弹对象
        if self.rect.top<-22:
            self.kill()
#敌方子弹类
#属性
class EnemyBullet(pygame.sprite.Sprite):
    def __init__(self,screen,x,y):
        #精灵类初始化
        pygame.sprite.Sprite.__init__(self)
        #创建图片
        self.image=pygame.image.load("D:\AI\aiprogram\课程设计\tupian\bullet1.png")
        #获取矩形对象
        self.rect=self.image.get_rect()
        self.rect.topleft=[x+50/2-8/2,y+39]
        #窗口
        self.screen=screen
        #速度
        self.speed=10
    def update(self):
        #修改子弹坐标
        self.rect.top+=self.speed
        #如果子弹移出屏幕上方   则摧毁子弹对象
        if self.rect.top >825:
            self.kill()
class GameSound(object):
    def __init__(self):
        pygame.mixer.init()     #音乐模块初始化
        pygame.mixer.music.load("D:\AI\aiprogram\课程设计\tupian\Dynamedion - 全民飞机大战背景音乐.mp3")
        pygame.mixer.music.set_volume(0.5)#声音大小
        self.__bomb=pygame.mixer.Sound('./sound/me_down.wav')
    def playBackgroundMusic(self):
        pygame.mixer.music.play(-1)#开始播放音乐
    def playBombSound(self):
        pygame.mixer.Sound.play(self.__bomb)
class Bomb(object):
    #初始化碰撞
    def __init__(self,screen,type):
        self.screen=screen
        if type=="enemy":
            #加载爆炸资源
            self.mImage=[pygame.image.load
                         ("D:\AI\aiprogram\课程设计\tupian\enemy0_down1.png")for v in range(1,5)]
        else:
            self.mImang=[pygame.imange.load
                         ("D:\AI\aiprogram\课程设计\tupian\hero_blowup_n1.png")for v in range(1,5)]
            #设置当前爆炸播放索引
            self.mIndex=0
            #爆炸设置
            self.mPos=[0,0]
            #是否可见
            self.mVisible=False
    def action(self):
        #触发爆炸方法draw
        #爆炸坐标
        self.mPos[0]=rect.left
        self.mPos[1]=rect.top
        #打开爆炸的开关
        self.mVisible=True
    def draw(self):
        if not self.mVisible:
            return
        self.screen.blit(self.mImage[self.mIndex],(self.mPos[0],self.mPos[1]))
        self.mIndex+=1
        if self.mIndex>=len(self.mImage):
            #如果下标已经到了最后  代表爆炸结束
            #下标位置重置mVisible重置
            self.mIndex=0
            self.mVisible=False
class Manager(object):
    bg_size=(512,768)
    #创建敌机定时器的id
    create_enemy_id=10
    #游戏结束   倒计时的id
    game_over_id=11
    #游戏是否结束
    is_game_over=False
    #倒计时时间
    over_time=3
    def __init__(self):
        pygame.init()
        #创建窗口
        self.screen=pygame.display.set_mode((480,852),0,32)
        #创建背景图片
        self.background=pygame.image.load("D:\AI\aiprogram\课程设计\tupian\background.png")
        #初始化一个玩家精灵组
        self.player







